package com.example.springboot.controller;
// 导入MyBatis-Plus的分页插件类，用于处理分页查询
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
// 导入自定义的统一响应结果类
import com.example.springboot.common.Result;
// 导入宿管实体类
import com.example.springboot.entity.DormManager;
// 导入用户实体类
import com.example.springboot.entity.User;
// 导入宿管业务逻辑接口
import com.example.springboot.service.DormManagerService;
// 导入Spring MVC的REST控制器注解
import org.springframework.web.bind.annotation.*;
// 导入资源注入注解
import javax.annotation.Resource;
// 导入HTTP会话对象，用于存储登录状态
import javax.servlet.http.HttpSession;
/**
 * 宿管管理控制器，处理宿管相关的HTTP请求
 */
// 标识该类为RESTful风格的控制器，自动将返回值转换为JSON格式
@RestController
@RequestMapping("/dormManager")
public class DormManagerController {
    // 注入宿管业务逻辑服务，由Spring容器管理
    @Resource
    private DormManagerService dormManagerService;

    /**
     * 宿管添加接口
     * @param dormManager 宿管实体对象，通过JSON请求体传递
     * @return 统一响应结果，包含操作成功或失败信息
     */
    // 映射POST请求到/add路径
    @PostMapping("/add")// 将HTTP请求的JSON体映射到DormManager对象
    public Result<?> add(@RequestBody DormManager dormManager) {
        // 调用服务层方法添加宿管，返回影响行数
        int i = dormManagerService.addNewDormManager(dormManager);
        // 根据影响行数判断操作是否成功
        if (i == 1) {
            return Result.success();
        } else {
            return Result.error("-1", "添加失败");
        }
    }

    /**
     * 宿管信息更新接口
     * @param dormManager 包含更新信息的宿管实体对象
     * @return 统一响应结果，包含操作成功或失败信息
     */
    // 映射PUT请求到/update路径，用于更新资源
    @PutMapping("/update")
    // 将HTTP请求的JSON体映射到DormManager对象
    public Result<?> update(@RequestBody DormManager dormManager) {
        // 调用服务层方法更新宿管信息，返回影响行数
        int i = dormManagerService.updateNewDormManager(dormManager);
        if (i == 1) {
            return Result.success();
        } else {
            return Result.error("-1", "更新失败");
        }
    }

    /**
     * 宿管删除接口
     * @param username 要删除的宿管用户名，通过路径变量传递
     * @return 统一响应结果，包含操作成功或失败信息
     */
    // 映射DELETE请求到/delete/{username}路径，用于删除资源
    @DeleteMapping("/delete/{username}")// 从路径变量中获取用户名参数
    public Result<?> delete(@PathVariable String username) {
        // 调用服务层方法删除宿管，返回影响行数
        int i = dormManagerService.deleteDormManager(username);
        if (i == 1) {
            return Result.success();
        } else {
            return Result.error("-1", "删除失败");
        }
    }

    /**
     * 宿管分页查询接口
     * @param pageNum 当前页码，默认值1
     * @param pageSize 每页记录数，默认值10
     * @param search 搜索关键词，默认值空字符串
     * @return 分页查询结果，包含宿管列表和分页信息
     */
    // 映射GET请求到/find路径，用于查询资源
    @GetMapping("/find")// 从请求参数中获取分页和搜索条件，设置默认值
    public Result<?> findPage(@RequestParam(defaultValue = "1") Integer pageNum,
                              @RequestParam(defaultValue = "10") Integer pageSize,
                              @RequestParam(defaultValue = "") String search) {
        // 调用服务层方法进行分页查询
        Page page = dormManagerService.find(pageNum, pageSize, search);
        if (page != null) {
            return Result.success(page);
        } else {
            return Result.error("-1", "查询失败");
        }
    }

    /**
     * 宿管登录接口
     * @param user 包含用户名和密码的用户实体对象
     * @param session HTTP会话，用于存储登录状态
     * @return 登录结果：成功返回宿管信息，失败返回错误信息
     */
    // 映射POST请求到/login路径，用于处理登录
    @PostMapping("/login")// 将HTTP请求的JSON体映射到User对象，注入HttpSession对象
    public Result<?> login(@RequestBody User user, HttpSession session) {
    // 调用服务层方法验证登录，返回用户对象或null
        Object o = dormManagerService.dormManagerLogin(user.getUsername(), user.getPassword());
        if (o != null) {
            System.out.println(o);// 打印登录用户信息
            // 登录成功，将身份标识和用户信息存入session
            session.setAttribute("Identity", "dormManager");
            session.setAttribute("User", o);
            return Result.success(o);// 返回登录成功的用户信息
        } else {
            return Result.error("-1", "用户名或密码错误");// 登录失败
        }
    }
}
